package br.com.manutencaocarro.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.Spinner;
import br.com.manutencaocarro.ColetaMontadoras;
import br.com.manutencaocarro.R;
import br.com.manutencaocarro.dao.CarroDAO;
import br.com.manutencaocarro.helper.CadastroCarroHelper;
import br.com.manutencaocarro.modelo.Carro;
import br.com.manutencaocarro.modelo.Montadora;

import com.loopj.android.http.RequestParams;

public class CadastraCarroActivity extends Activity
{
	private CadastroCarroHelper helper;
	private Carro carroSelecionado;
	private int idMontadoraSelecionada;
	private boolean detalhar;

	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.cadastro_carro);

		Intent intent = getIntent();

		if( intent != null )
		{
			if( intent.getSerializableExtra("carroSelecionado") != null )
			{
				carroSelecionado = (Carro) intent.getSerializableExtra("carroSelecionado");
			}

			if( intent.getSerializableExtra(getString(R.string.detalhar)) != null )
			{
				detalhar = (Boolean) intent.getSerializableExtra(getString(R.string.detalhar));
			}
		} 

		helper = new CadastroCarroHelper(this, carroSelecionado);
	}

	@Override
	protected void onResume() 
	{
		super.onResume();
		Spinner montadoraSelecionada = (Spinner) findViewById(R.id.montadora);

		if( carroSelecionado == null )
		{
			montadoraSelecionada.setOnItemSelectedListener( new OnItemSelectedListener() {

				@Override
				public void onItemSelected(AdapterView<?> adapter, View view, int position, long id) {
					idMontadoraSelecionada = (int) adapter.getItemIdAtPosition(position);

					RequestParams params = new RequestParams();
					params.add( "idMontadora", String.valueOf( idMontadoraSelecionada ) );

					new ColetaMontadoras().invokeWSCarrosMontadoras(params, CadastraCarroActivity.this );
				}

				@Override
				public void onNothingSelected(AdapterView<?> adapter) {

				}
			} );
		} else {
			montadoraSelecionada.setOnTouchListener( new OnTouchListener() {

				@Override
				public boolean onTouch(View v, MotionEvent event) {
					new ColetaMontadoras().invokeWSMontadoras( null, CadastraCarroActivity.this );
					RequestParams params = new RequestParams();
					params.add( "idMontadora", String.valueOf( carroSelecionado.getIdMontadora() ) );
					new ColetaMontadoras().invokeWSCarrosMontadoras( params, CadastraCarroActivity.this );
					return false;
				}
			});

			montadoraSelecionada.setOnItemSelectedListener( new OnItemSelectedListener() {

				@Override
				public void onItemSelected(AdapterView<?> adapter, View view, int position, long id) {
					Montadora montadora = (Montadora) adapter.getItemAtPosition(position);
					if( !detalhar )
					{
						RequestParams params = new RequestParams();
						params.add( "idMontadora", String.valueOf( montadora.getIdMontadora() ) );
						new ColetaMontadoras().invokeWSCarrosMontadoras(params, CadastraCarroActivity.this );
					}
				}

				@Override
				public void onNothingSelected(AdapterView<?> adapter) {

				}
			} );
		}

		Button botao = (Button) findViewById(R.id.cadastrar_carro);

		if( carroSelecionado != null )
		{
			botao.setText(R.string.atualizar);
			helper.colocaCarroNoFormulario( CadastraCarroActivity.this, carroSelecionado );
		}

		if( detalhar )
		{
			helper.setReadOnly();
			botao.setVisibility(android.view.View.INVISIBLE);
		}

		botao.setOnClickListener( new OnClickListener() 
		{
			@Override
			public void onClick(View v) 
			{
				Carro carro = helper.pegaCarroCadastro(CadastraCarroActivity.this);
				CarroDAO dao = new CarroDAO(CadastraCarroActivity.this);

				if( carroSelecionado == null )
				{
					dao.cadastraCarro(carro);
				} else {
					carro.setId(carroSelecionado.getId());
					dao.atualiza(carro);
				}

				dao.close();

				finish();
			}
		});
	}
}